const jwt = require('jsonwebtoken');

/**
 * JWT认证中间件
 * @param {Object} req - 请求对象
 * @param {Object} res - 响应对象
 * @param {Function} next - 下一个中间件函数
 */
const authenticateToken = (req, res, next) => {
  const authHeader = req.headers['authorization'];
  const token = authHeader && authHeader.split(' ')[1]; // Bearer TOKEN

  if (!token) {
    return res.status(401).json({
      success: false,
      error: {
        message: '访问令牌缺失',
        statusCode: 401
      }
    });
  }

  jwt.verify(token, process.env.JWT_SECRET, (err, user) => {
    if (err) {
      return res.status(403).json({
        success: false,
        error: {
          message: '访问令牌无效或已过期',
          statusCode: 403
        }
      });
    }

    req.user = user;
    next();
  });
};

/**
 * 角色权限验证中间件
 * @param {Array} allowedRoles - 允许的角色列表
 * @returns {Function} 中间件函数
 */
const authorizeRoles = (allowedRoles) => {
  return (req, res, next) => {
    if (!req.user) {
      return res.status(401).json({
        success: false,
        error: {
          message: '用户未认证',
          statusCode: 401
        }
      });
    }

    if (!allowedRoles.includes(req.user.role)) {
      return res.status(403).json({
        success: false,
        error: {
          message: '权限不足',
          statusCode: 403
        }
      });
    }

    next();
  };
};

module.exports = {
  authenticateToken,
  authorizeRoles
};